using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace VRCPRServer.Models {
    public class ModelDataManager : MonoBehaviour
    {

        //#region TempProperty
        //int _tempPressCount = 0;
        //int _tempPressCorrect = 0;
        //int _tempBlowCount = 0;
        //int _temBlowCorrect = 0;
        //bool isOpenAirway = false;//是否打开气道
        //int loopCount = 0;     //循环次数
        //DateTime BlowClock = DateTime.Now;//吹气开始时间,指的是一轮的吹气时间
        //DateTime PressClock = DateTime.Now;//按压一次的开始时间


        //bool isFirstPress = true; //是否是第一次按压
        //int lastPressValue = 0;  //上一帧的按压值
        //bool isNotRebound = false;  //未回弹
        //int pressSameCount = 0;  //按压值相同
        //int last = 0;//上一帧的深度

        //bool isPressPosFlag = true; //记录按压位置错误
        //bool frequency = true;
        //bool rebound = true;    //回弹变量
        //bool isPress = false;
        //bool isBlow = false;

        //int tempPressCount = 0;   //按压次数
        //int tempBlowCount = 0;  //吹气次数
        //int TQlast = 0; //上一次通气值
        //double pressFrequency = 0;//按压频率
        //System.Random random = new System.Random();
        //#endregion

        //public StudentVM(string id)
        //{
        //    studentM = DesignUI.UIMainCanvas.Instance.StudentMs.FirstOrDefault(item => item.StudentID == id);
        //    NotificationCenter.Get().AddEventListener(studentM.StudentID, new OnNotification(new OnNotification(PressOperation)));
        //}

        ///// <summary>
        ///// 按压和吹气操作
        ///// </summary>
        ///// <param name="data"></param>
        //public void PressOperation(Notification notification)
        //{
        //    try
        //    {
        //        byte[] data = notification.param as byte[];
        //        if (data == null) return;

        //        int depthValue = data[3];//按压深度
        //        byte blowDepth = data[4];//吹气深度

        //        byte value = data[5];
        //        byte airWay = (byte)((value & 0x80) >> 7);       //气道状态
        //        byte notRebound = (byte)((value & 0x40) >> 6);   //未回弹

        //        byte midValue = (byte)((value & 0x10) >> 4);     //中
        //        byte topValue = (byte)((value & 0x8) >> 3);     //上
        //        byte bottomValue = (byte)((value & 0x4) >> 2);  //下
        //        byte leftValue = (byte)((value & 0x2) >> 1);    //左
        //        byte rightValue = (byte)(value & 0x1);          //右

        //        Debug.Log("位置：" + midValue.ToString() + "  " + topValue.ToString() + "  " + bottomValue.ToString() + "  " + leftValue.ToString() + "  " + rightValue.ToString());
        //        InitPressData(depthValue, midValue, topValue, bottomValue, leftValue, rightValue);
        //        InitBlowData(blowDepth);
        //        InitBlowData(blowDepth);
        //    }
        //    catch (Exception e)
        //    {
        //        Debug.Log(e);
        //    }
        //}

        ///// <summary>
        ///// 检测气道是否打开
        ///// </summary>
        ///// <param name="data"></param>
        //public void AirwayOperation(Notification data)
        //{
        //    int state = int.Parse(data.param.ToString());
        //    if (state == 1)
        //    {
        //        isOpenAirway = true;
        //    }
        //    else
        //    {
        //        isOpenAirway = false;
        //    }
        //}


        ///// <summary>
        ///// 分析按压数据
        ///// </summary>
        ///// <param name="depth"></param>
        ///// <param name="mid"></param>
        ///// <param name="top"></param>
        ///// <param name="bottom"></param>
        ///// <param name="left"></param>
        ///// <param name="right"></param>
        //void InitPressData(int depth, int mid, int top, int bottom, int left, int right)
        //{
        //    //判断是否是第一次按压
        //    if (isFirstPress)
        //    {
        //        studentM.StartTime = DateTime.Now;
        //        //StartClock();
        //    }
        //    isFirstPress = false;
        //    if (!isFirstPress)
        //    {
        //        if (depth == lastPressValue)
        //        {
        //            pressSameCount++;
        //            //如果相同的次数大于5，则认为没有按压
        //            if (pressSameCount >= 5)
        //            {
        //                if (Confige._lasttoolstate == Toolstate.PressState)
        //                {
        //                    //if (!StopWatchManager.Get().GetClock("BreakOff").isRun())
        //                    {
        //                        //中断操作开始计时
        //                        //StopWatchManager.Get().GetClock("BreakOff")._Start();
        //                    }
        //                }
        //            }
        //        }
        //        //如果不相同，则认为按压 重置数据
        //        else
        //        {
        //            if (Confige._lasttoolstate == Toolstate.PressState)
        //            {
        //                lastPressValue = depth;
        //                pressSameCount = 0;
        //                //StopWatchManager.Get().GetClock("BreakOff").Clear();
        //            }
        //        }
        //    }
        //    //按压
        //    if (depth > last)
        //    {
        //        //按压位置错误
        //        if (isPressPosFlag)
        //        {
        //            //位置
        //            if (top > 0)
        //            {
        //                studentM.UpNumber++;
        //                isPressPosFlag = false;
        //            }
        //            else if (bottom > 0)
        //            {
        //                studentM.DownNumber++;
        //                isPressPosFlag = false;
        //            }
        //            else if (left > 0)
        //            {
        //                studentM.LeftNumber++;
        //                isPressPosFlag = false;
        //            }
        //            else if (right > 0)
        //            {
        //                studentM.RightNumber++;
        //                isPressPosFlag = false;
        //            }
        //        }

        //        //标志量，决定了按压
        //        if (frequency)
        //        {
        //            tempBlowCount = 0;
        //            studentM.PressNumber++;
        //            tempPressCount++;

        //            //如果上一次操作是通气，则计算按压的时间间隔
        //            if (Confige._lasttoolstate == Toolstate.BlowState)
        //            {
        //                //StopWatchManager.Get().GetClock("BreakOff").Stop();
        //                float breakoffTime = StopWatchManager.Get().GetClock("BreakOff").GetSeconds();
        //                //StopWatchManager.Get().GetClock("BreakOff").Clear();
        //                studentM.BreakTimes.Add((int)breakoffTime);

        //                frequency = false;
        //            }
        //        }

        //        //本次按压计算上一次的回弹值
        //        if (rebound)
        //        {
        //            //如果是第一次操作 
        //            if (Confige._lasttoolstate == Toolstate.None)
        //            {
        //                PressClock = DateTime.Now;
        //            }
        //            if (Confige._lasttoolstate == Toolstate.PressState)
        //            {
        //                // 计算当前按压时间
        //                TimeSpan span = DateTime.Now - PressClock;
        //                double sencond = span.TotalSeconds;//经过了多少秒
        //                PressClock = DateTime.Now;
        //                pressFrequency = (1.0f / sencond) * 60.0f;
        //                double preessPL = random.NextDouble() * (Confige.pressFrequency2 - Confige.pressFrequency1) + Confige.pressFrequency1;
        //                pressFrequency = studentM.PressNumber == 1 ? preessPL : pressFrequency;
        //                studentM.PressFrequencys.Add((int)pressFrequency);
        //            }
        //            //保存每次回弹的值
        //            studentM.intRebound.Add(last);
        //            //是否充分回弹
        //            if (last > Confige.NotRebound)
        //            {
        //                studentM.PressNotRebound++;
        //                isNotRebound = true;
        //            }
        //            rebound = false;
        //        }
        //        isPress = false;
        //    }
        //    //回弹
        //    else if (depth < last)
        //    {
        //        //开始回弹，获取按压的最大值
        //        if (!isPress)
        //        {
        //            //如果都没有按压错 则按压位置正确
        //            if (isPressPosFlag)
        //            {
        //                studentM.CenterNumber++;
        //            }
        //            isPressPosFlag = true;
        //            //按压深度值
        //            studentM.intPress.Add(last);
        //            float pressValue = Mathf.InverseLerp(0, Confige.MaxPressValue, last);
        //            pressValue = Mathf.Lerp(0, Confige.PressLength, pressValue);
        //            studentM.PressDepth += pressValue;

        //            //按压正确
        //            if (studentM.intPress.Count > 0)
        //            {
        //                double pressvalue = studentM.intPress[studentM.intPress.Count - 1];
        //                double reboundvalue = 0.0f;
        //                if (studentM.intRebound.Count > 0)
        //                {
        //                    reboundvalue = studentM.intRebound[studentM.intRebound.Count - 1];
        //                }
        //                // 按压正确 深度 回弹 频率
        //                if (pressValue > Confige.PressDepth1 && pressValue < Confige.PressDepth2 && reboundvalue < Confige.NotRebound)
        //                {
        //                    if (Confige.timecalc == 1)
        //                    {
        //                        if (pressFrequency > Confige.pressFrequency1 && pressFrequency < Confige.pressFrequency2)
        //                        {
        //                            studentM.PressRight++;
        //                            _tempPressCorrect++;
        //                        }
        //                    }
        //                    else
        //                    {
        //                        studentM.PressRight++;
        //                        _tempPressCorrect++;
        //                    }
        //                }
        //            }

        //            if (!isNotRebound)
        //            {
        //                //按压深度正确
        //                if (pressValue > Confige.PressDepth1 && pressValue < Confige.PressDepth2)
        //                {
        //                    studentM.PressDeepRight++;
        //                }
        //                //按压不足
        //                else if (pressValue <= Confige.PressDepth1)
        //                {
        //                    studentM.PressTooShallow++;
        //                }
        //                //按压过大
        //                else if (pressValue >= Confige.PressDepth2)
        //                {
        //                    studentM.PressTooDeep++;
        //                }
        //            }

        //            isNotRebound = false;
        //            isPress = true;
        //            rebound = true;
        //            frequency = true;
        //        }
        //    }
        //    if (depth != 0)
        //    {
        //        Confige._lasttoolstate = Toolstate.PressState;
        //    }
        //    last = depth;

        //}


        ///// <summary>
        ///// 分析吹气数据
        ///// </summary>
        ///// <param name="data"></param>
        //void InitBlowData(int data)
        //{
        //    //开始吹气
        //    if (data > TQlast)
        //    {
        //        //计算第一次吹气时间,并计算按压得分
        //        if (Confige._lasttoolstate == Toolstate.PressState)
        //        {
        //            BlowClock = DateTime.Now;
        //            //此处用来计算按压得分

        //            _tempPressCorrect = 0;
        //            _tempPressCount = 0;
        //            tempPressCount = 0;
        //        }
        //        isBlow = false;
        //    }

        //    else if (data < TQlast)
        //    {
        //        if (!isBlow)
        //        {
        //            int a = studentM.VentilationNumber;
        //            _tempBlowCount++;
        //            tempBlowCount++;

        //            float currentValue = Mathf.InverseLerp(0, Confige.MaxBlowValue, TQlast);
        //            currentValue = Mathf.Lerp(0, Confige.BlowVol, currentValue);

        //            studentM.Ventilation += (int)currentValue;
        //            //吹气不足
        //            if (TQlast < Confige.VentilationVolume1 / 100)
        //            {
        //                if (isOpenAirway == true)
        //                {
        //                    studentM.Hypoventilation++;
        //                }
        //                if (isOpenAirway == false)
        //                {
        //                    studentM.VentilationExcessive++;
        //                }
        //            }
        //            //吹气正确
        //            else if (TQlast >= Confige.VentilationVolume1 / 100 && TQlast < Confige.VentilationVolume2 / 100)
        //            {
        //                if (isOpenAirway == true)
        //                {
        //                    studentM.VentilationRight++;
        //                }
        //                if (isOpenAirway == false)
        //                {
        //                    studentM.BlowIntiCraw++;
        //                }
        //            }
        //            //吹气过大
        //            else if (TQlast >= Confige.VentilationVolume2 / 100 && TQlast <= Confige.VentilationVolume2 + 2)
        //            {
        //                if (isOpenAirway == true)
        //                {
        //                    studentM.VentilationExcessive++;
        //                }
        //                if (isOpenAirway == false)
        //                {
        //                    studentM.BlowIntiCraw++;
        //                }
        //            }
        //            //吹气进胃
        //            else if (TQlast > Confige.VentilationVolume2 / 100 + 2)
        //            {
        //                studentM.BlowIntiCraw++;
        //            }

        //            if (Confige._person != Person.Press && Confige._person != Person.Blow)
        //            {

        //                isBlow = true;
        //            }
        //        }

        //    }
        //    if (data != 0)
        //    {
        //        Confige._lasttoolstate = Toolstate.BlowState;
        //    }
        //    TQlast = data;
        //}

        ///// <summary>
        ///// 开始计时
        ///// </summary>
        //void StartClock()
        //{
        //    Tools.UIAction.Get().Add(GetType().ToString(), () =>
        //    {
        //        TimeSpan time = DateTime.Now - studentM.StartTime;
        //        double timeLeft = time.TotalSeconds - StopWatchManager.Get().GetClock(GetType().ToString()).GetSeconds();
        //        int minute = (int)(timeLeft / 60);
        //        int second = (int)(timeLeft % 60);

        //    });

        //}

        ///// <summary>
        ///// 用来计算平均频率
        ///// </summary>
        ///// <param name="data"></param>
        ///// <returns></returns>
        //public int Calcavg(List<float> data)
        //{
        //    if (data.Count == 0) return 0;
        //    float sum = 0;
        //    for (int i = 0; i < data.Count; i++)
        //    {
        //        sum += data[i];
        //    }
        //    return (int)(sum / data.Count);
        //}

    }
}

